6.9 标准库类型:bitset

简介

标准库定义了bitset类让位运算的使用更加容易,并且能够处理超过最长整形类型大小的位集合。bitset类定义在头文件bitset中。

定义和初始化bitset

bitset类似于array类,具有固定的大小。当我们定义一个bitset时需要声明它包含多少个二进制位:

bitset<32> bitvec(1U);  // 32位, 低位为1其他位为0

初始化的方法:

操作 含义
bitset<n> b 每一位均为0
bitset<n> b(u) bunsigned long longu的低n位的拷贝,如果n大于unsigned long long的大小,那么超过的高位被置为0
bitset<n> b(s, pos, m, zero, one) bstring s从位置pos开始m个字符的拷贝。s只能包含字符zeroone,如果包含其他字符会抛出invalid_argument的错误。zero默认为0one默认为1
bitset<n> b(cp, pos, m, zero, one) 和上面类似,只不过从cp指向的字符数组中拷贝字符

bitset操作

  • b.any()b中是否存在置位的二进制位

  • b.all()b中所有位都置位了吗

  • b.none()b中不存在置位的二进制位吗

  • b.count()b中置位的位数

  • b.size():返回b的位数

  • b.test(pos):返回pos位置是否置位

  • b.set(pos, v):将位置pos处的位设置为boolv

  • b.set():将b中所有位置位

  • b.reset(pos):将pos复位

  • b.reset():将所有位复位

  • b.flip(pos):将位置pos处的位改变

  • b.flip():改变每一位的状态

  • b[pos]:访问pos

  • b.to_ulong():返回一个unsigned long

  • b.to_ullong():返回一个unsigned long long

  • b.to_string(zero, ont):返回一个string

  • os << b:将b中二进制位打印为字符1或者0

  • is >> b:从is读取字符存入b,当下一个字符不是10,或者已经读入b.size()个位时停止